package com.dingding.service.share.dao;

import java.util.List;

import com.dingding.common.core.beans.UserLogin;
import com.dingding.common.core.beans.share.ActivityGift;
import com.dingding.common.core.beans.share.ActivityRefGift;
import com.dingding.common.core.beans.share.ActivityShare;
import com.dingding.common.core.beans.share.ActivityShareRefGift;
import com.dingding.facde.activity.dto.commonactivity.ActivityDetail;
import com.dingding.facde.activity.dto.commonactivity.GiftInfo;

/**
 * @Description:活动分享的dao
 * @author fengshuonan
 * @date 2016年9月5日 下午5:40:11
 * @version 叮叮搭车
 * @since 2.4
 */
public interface IActivityShareDao {

	/**
	 * @Description:获取用户的分享记录
	 * @param userId 用户id
	 * @param activityId 活动id
	 * @author fengshuonan
	 * @return ActivityShare 生成活动分享记录
	 * @since 2.4
	 */
	public ActivityShare getUserActivityShare(String userId,String activityId);
	
	/**
	 * @Description:获取某个用户的活动的所选的礼品
	 * @param shareKey 用户活动标识
	 * @author fengshuonan
	 * @return String[] 礼品的集合
	 * @since 2.4
	 */
	public String[] getGiftList(String shareKey);
	
	/**
	 * @Description:判断openId是否存在于数据库中
	 * @param openId 微信公众号id
	 * @author fengshuonan
	 * @return boolean true openId存在  false openId不存在
	 * @since 2.4
	 */
	public boolean isOpenIdHaveReg(String openId);
	
	/**
	 * @Description: 判断电话是否注册过,
	 * 			如果注册过，返回用户的登录id,如果没注册过就返回null
	 * @param telephone 电话号码
	 * @author fengshuonan
	 * @since 2.4
	 */
	public String isUserHaveReg(String telephone);
	
	/**
	 * @Description:判断手机号是否正确
	 * @author fengshuonan
	 * @return boolean true 正确 false 不正确
	 * @since 2.4
	 */
	public boolean isMsgCodeTrue(String telephone,String code);
	
	/**
	 * @Description:增加活动发起者的邀请次数
	 * @param shareKey 
	 * @author fengshuonan
	 * @return true 添加成功
	 * @since 2.4
	 */
	public void addActAnsInviteNum(String shareKey);
	
	/**
	 * @Description:获取用户id通过phone
	 * @author fengshuonan
	 * @since 2.4
	 */
	public String getUserIdByPhone(String phone);
	
	/**
	 * @Description:发送短信验证码
	 * @author fengshuonan
	 * @since 2.4
	 */
	public boolean sendPhoneMessage(String phone);
	
	/**
	 * @Description:获取某个活动的详情
	 * @author fengshuonan
	 * @since 2.4
	 */
	public ActivityDetail getActivityInfo(String activityId);
	
	/**
	 * @Description:获取某个活动对应的礼品的集合
	 * @author fengshuonan
	 * @since 2.4
	 */
	public List<GiftInfo> getActivityGifts(String activityId);
	
	/**
	 * @Description:添加用户的活动分享记录
	 * @author fengshuonan
	 * @since 2.4
	 */
	public ActivityShare addUsesActivityShare(String activityId,String userId,String giftId);
	
	/**
	 * @Description:根据活动和礼品id获取，礼品详情信息
	 * @author fengshuonan
	 * @since 2.4
	 */
	public GiftInfo getActivityGiftInfo(String activityId,String giftId);
	
	/**
	 * @Description:获取活动邀请达标人数
	 * @author fengshuonan
	 * @since 2.4
	 */
	public Integer getActivityReachNum(String activityId);
	
	/**
	 * @Description:获取用户活动分享的所选的礼物名称
	 * @param shareKey 用户活动分享表的主键id
	 * @author fengshuonan
	 * @since 2.4
	 */
	public ActivityGift getUserActivityGiftName(String shareKey);
	
	/**
	 * @Description:获取某个邀请人数的排名
	 * @author fengshuonan
	 * @return 当前邀请人数的排名
	 * @since 2.4
	 */
	public Integer getTheNumSort(String activityId, Integer inviteNum);
	
	/**
	 * @Description:判断当前活动的礼品是否充足
	 * @param shareKey 用户发起分享的标示
	 * @author fengshuonan
	 * @return boolean true 充足  false 不充足
	 * @since 2.4
	 */
	boolean isRestGiftEnough(String activityId, String shareKey);
	
	/**
	 * @Description:减少礼品的库存数量
	 * @param activityId 活动id
	 * @param giftId 礼品id
	 * @author fengshuonan
	 * @since 2.4
	 */
	public void reduceGiftNumber(String activityId,String giftId);
	
	/**
	 * @Description:获取用户发起分享所选的礼品
	 * @param shareKey 发起分享的唯一标识
	 * @author fengshuonan
	 * @since 2.4
	 */
	public ActivityShareRefGift getActShareGift(String shareKey);
	
	/**
	 * @Description:通过活动id和礼品id获取活动礼品详情
	 * @author fengshuonan
	 * @return ActivityRefGift
	 * @since 2.4
	 */
	public ActivityRefGift getActivityGiftDetail(String acId,String giftId);
	
	/**
	 * @Description:添加被邀请人的记录
	 * @param shareKey 发起分享人的标示
	 * @param invitedUserId 被邀请人的用户id
	 * @author fengshuonan
	 * @since 2.4
	 */
	public void addInviteRecord(String shareKey,String invitedUserId);
	
	/**
	 * @Description:判断数据库中是否有用户的openId
	 * @author fengshuonan
	 * @return String 如果成功，返回该用户的uid，没有则返回null
	 * @since 2.4
	 */
	public String haveOpenId(String openId);
	
	/**
	 * @Description:更新用户的openId
	 * @author fengshuonan
	 * @since 2.4
	 */
	public void updateOpenId(String userId,String openId);
	
	/**
	 * @Description:获取用户登录信息
	 * @author fengshuonan
	 * @since 2.4
	 */
	public UserLogin getUserlogin(String userId);
	
	/**
	 * @Description:根据openId获取用户的登录信息
	 * @author fengshuonan
	 * @since 2.4
	 */
	public UserLogin getUserLoginByOpenId(String openId);
	
	
	/**
	 * @Description 判断用户是否参加或唐山开城活动
	 * @param userId
	 * @author fengshuonan
	 * @return boolean true 参加过  false 没有参加
	 */
	public boolean haveJoinTangshanKaiCheng(String userId);
	
}
